package com.example.ymm.util;

import com.example.ymm.modules1.service.dto.common.ExcelData;
import com.example.ymm.modules1.service.dto.heng.ex.ImQuestionItemDto;
import java.util.ArrayList;
import java.util.List;

public class ArrayListSplitter {

    // 示例类，实际使用时替换为你的类
    static class Item {
        private String name;

        public Item(String name) {
            this.name = name;
        }

        public String getName() {
            return name;
        }

        @Override
        public String toString() {
            return "Item{name='" + name + "'}";
        }
    }

    public static void main(String[] args) {
        // 创建示例数据
        List<Item> originalList = new ArrayList<>();
        originalList.add(new Item("apple"));
        originalList.add(new Item("banana"));
        originalList.add(null);
        originalList.add(new Item("cherry"));
        originalList.add(new Item("date"));
        originalList.add(null);
        originalList.add(new Item("elderberry"));

        // 拆分数组
        List<List<Item>> subLists = splitListByNullProperty(originalList);

        // 输出结果
        for (int i = 0; i < subLists.size(); i++) {
            System.out.println("子数组 " + (i + 1) + ": " + subLists.get(i));
        }
    }

    /**
     * 根据元素属性为空值拆分列表
     * @param originalList 原始列表
     * @return 拆分后的子列表集合
     */
    public static <ImQuestionItemDto> List<List<ImQuestionItemDto>> splitListByNullProperty(List<ImQuestionItemDto> originalList) {
        List<List<ImQuestionItemDto>> result = new ArrayList<>();
        if (originalList == null || originalList.isEmpty()) {
            return result;
        }

        List<ImQuestionItemDto> currentSubList = new ArrayList<>();
        for (ImQuestionItemDto item : originalList) {
            // 检查元素是否为null或其属性是否为空
            if (checkPropertyIsNull(item)) {
                // 如果当前子列表不为空，则添加到结果集
                if (!currentSubList.isEmpty()) {
                    result.add(new ArrayList<>(currentSubList));
                    currentSubList.clear();
                }
                // 不将空元素添加到任何子列表
            } else {
                // 将非空元素添加到当前子列表
                currentSubList.add(item);
            }
        }

        // 添加最后一个子列表（如果有）
        if (!currentSubList.isEmpty()) {
            result.add(currentSubList);
        }

        return result;
    }



    /**
       名称 = 题目时 进行数组拆分
     * @param
     * @return 拆分后的子列表集合
     */
    public static List<List<ExcelData>> extractSubArrays(List<ExcelData> arrayList) {
        List<List<ExcelData>> result = new ArrayList<>();
        List<ExcelData> currentSubArray = null;

        for (ExcelData item : arrayList) {
            if ("试题类型".equals(item.getTitle())) {
                // 如果遇到"试题类型"，结束当前子数组并开始新的子数组
                if (currentSubArray != null) {
                    result.add(currentSubArray);
                }
                currentSubArray = new ArrayList<>();
                currentSubArray.add(item);
            } else if (currentSubArray != null) {
                // 如果当前有子数组，则添加到当前子数组
                currentSubArray.add(item);
            }
        }

        // 添加最后一个子数组（如果有）
        if (currentSubArray != null && !currentSubArray.isEmpty()) {
            result.add(currentSubArray);
        }

        return result;
    }

    /**
     * 检查元素的特定属性是否为空
     * 注意：此方法需要根据实际对象类型和属性进行调整
     * @param item 要检查的元素
     * @return 如果属性为空返回true，否则返回false
     */
    private static boolean checkPropertyIsNull(Object item) {
        // 这里假设Item类有一个getName()方法返回String类型的属性
        if (item instanceof ImQuestionItemDto) {
            ImQuestionItemDto typedItem = (ImQuestionItemDto) item;
            return typedItem.getTitle() == null&&typedItem.getValue()==null;
        }
        // 对于其他类型的对象，默认认为属性不为空
        return false;
    }
}
